package com.ruoyi.web.controller.system;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.Project;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * 文件上传相关接口
 *
 * @author 蒼飞
 * @date 2023-11-29
 */
@RestController
@RequestMapping("/system/upload")
public class UploadController {
    @Value("${upload.path}")
    String basic_path;

    /**
     * 上传pdf文件
     *
     * @param file
     * @return
     */
    @RequestMapping(value = "/pdf")
    public AjaxResult upload( MultipartFile file) {
        Project project = new Project();
        // 文件名
        String originalFileName = file.getOriginalFilename().toString();
        System.out.println(originalFileName);
        if (!file.getName().matches("^.+\\.(?i)(pdf)$")
                && !file.getName().matches("^.+\\.(?i)(PDF)$")
                && !originalFileName.matches("^.+\\.(?i)(pdf)$")
                && !originalFileName.matches("^.+\\.(?i)(PDF)$")) {
            return AjaxResult.error("文件格式不正确!");
        }

        try {
            byte[] bytes = file.getBytes();
            //originalFileName = new String(file.getOriginalFilename().getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
            // 生成文件路径
            File directory = new File("");//设定为当前文件夹
            //上传目录为域名 + 项目当前存在文件夹 + 文件名(后端服务和前端服务都打包好放在同一个文件夹了,需要用前端域名访问文件，所以需要将上传的文件放在前端的dist目录下)
            String filePath = directory.getCanonicalPath() +basic_path+"/" + originalFileName;
            File dest = new File(filePath);
            // 判断文件父目录是否存在
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdir();
            }
            FileUtils.writeByteArrayToFile(dest, bytes);
            // 相关数据保存到数据库
            project.setPdfName(originalFileName);
            project.setDetailFileUrl("/upload/"+originalFileName);
            return AjaxResult.success(project);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return AjaxResult.error("上传PDF文件失败");
    }

}
